package com.sayice.icemusic.service.music.impl.decorator;

import com.sayice.icemusic.pojo.Music;
import com.sayice.icemusic.sort.MusicSort;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * 具体音乐服务装饰器
 *
 * @author shubing
 */
@Component
public class MusicServiceImpl extends MusicServiceDecorator {
    private MusicSort musicSort;
    
    /**
     * 搜索音乐
     *
     * @param name   音乐名
     * @param sorter 排序方式
     * @return 搜索到的音乐列表
     */
    @Override
    public List<Music> search(String name, String sorter) {
        List<Music> musicList = super.search(name, sorter);
        sort(musicList, name, sorter);
        return musicList;
    }
    
    /**
     * 排序
     *
     * @param musicList    音乐列表
     * @param searchedName 搜索的音乐名
     * @param sorter       排序方式
     */
    public void sort(List<Music> musicList, String searchedName, String sorter) {
        try {
            setSorter(sorter);
            musicSort.sort(musicList, searchedName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 设置排序器
     *
     * @param sorterName 排序器名
     */
    private void setSorter(String sorterName) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        musicSort = new MusicSort() {
        };
        if (StringUtils.hasLength(sorterName)) {
            final String packagePath = "com.sayice.icemusic.sort.impl.";
            String className = packagePath + sorterName;
            musicSort = (MusicSort) Class.forName(className).newInstance();
        }
    }
}